All \(\lambda\), \(W_\pi\), \(W_A\) are deterministic pyro.params and they are optimized during the training. Discrete states \(z_{n,t}\) are enumerated exactly, allowing all possible configurations to be calculated using TraceEnum_ELBO (without stochastic approximation).
Obiettivo: Predire la distribuzione di donazioni del prossimo anno per un donatore e decodificare gli stati latenti passati usando un Hidden Markov Model (HMM) con emissioni Poisson dipendenti da covariate (GLM).
Input principali
birth_year, gender
Storico donazioni: history_years, history_counts
Covariate opzionali per emissioni (x_em_builder) e transizioni (x_A_builder)
Anni COVID per indicatore: covid_years
Predicting Next-Year Donations
Passaggi principali
Preparazione dati e covariate
Normalizzazione di età e anno di nascita
Costruzione delle covariate per stati iniziali (x_pi), transizioni (x_A) ed emissioni (x_em)
Emissioni Poisson
Calcolo delle probabilità logaritmiche delle osservazioni dati gli stati (emis_log)
Dimensione risultante: (N=1, T, K)
Inizializzazione stati latenti
Logits iniziali log_pi0 combinando prior pi_base e covariate iniziali
Normalizzazione con log_softmax → probabilità iniziali log_pi
Decodifica Viterbi
Ricerca del percorso di stati più probabile (v_path)
Backpointers psi per tracciare i percorsi ottimali
Forward Filtering
Calcolo α_t (probabilità marginale di ogni stato al tempo t)
Normalizzazione → distribuzione sugli stati all’ultimo anno osservato (alpha_T)
Predizione prossimo anno
Transizione verso l’anno successivo usando A_next
Emissione Poisson predittiva combinata con probabilità sugli stati
Calcolo:
Probabilità di ciascuno stato p_next
Numero atteso di donazioni expected_next
Probabilità di almeno una donazione prob_donate_next
PMF fino a max_k con tail >= max_k+1
Predicting Next-Year Donations
Output
Sequenza stati passati: viterbi_states
Distribuzione di probabilità del prossimo anno: next_state_probs
(‘y_pred_hmm’) → numero atteso di donazioni per ciascun individuo nell’anno successivo. \(\textbf{state\_prob}\) → distribuzione sugli stati latenti alla fine dell’anno osservato, usata per calcolare la predizione.
Risultato finale della funzione: \[
\text{y\_expected} = \big(\mathbb{E}[y^{(1)}_{t+h}], \dots, \mathbb{E}[y^{(N)}_{t+h}]\big), \quad
\text{state\_dist} = \alpha^{(t+h)}_n \text{ per ogni individuo } n
\]